# Build the 6.14 ath10k-ct driver version.
# Probably this should match as closely as
# possible to whatever mac80211 backports version is being used.
-CT_KVER="-6.14"
+CT_KVER="-6.18"
PKG_BUILD_PARALLEL:=1
---- a/ath10k-6.14/mac.c
-+++ b/ath10k-6.14/mac.c
-@@ -11650,7 +11650,6 @@ int ath10k_mac_register(struct ath10k *a
+--- a/ath10k-6.18/mac.c
++++ b/ath10k-6.18/mac.c
+@@ -11686,7 +11686,6 @@ int ath10k_mac_register(struct ath10k *a
ar->hw->wiphy->n_cipher_suites = ar->hw_params.n_cipher_suites;
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+++ /dev/null
-Date: Fri, 28 Mar 2025 19:56:06 +0800
-Subject: [PATCH] ath10k-ct: make it compatible with the old LTS kernel
-
-Rollback some APIs to fix compilation errors.
-
----
- ath10k-6.14/ahb.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/ath10k-6.14/ahb.c
-+++ b/ath10k-6.14/ahb.c
-@@ -842,7 +842,7 @@ static struct platform_driver ath10k_ahb
- .of_match_table = ath10k_ahb_of_match,
- },
- .probe = ath10k_ahb_probe,
-- .remove = ath10k_ahb_remove,
-+ .remove_new = ath10k_ahb_remove,
- };
-
- int ath10k_ahb_init(void)
[1] https://github.com/torvalds/linux/commit/d5b7485588dffb39c5687e965623124ab7ebcd51
---
- ath10k-6.14/snoc.c | 6 +++---
+ ath10k-6.18/snoc.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
---- a/ath10k-6.14/snoc.c
-+++ b/ath10k-6.14/snoc.c
-@@ -1635,10 +1635,10 @@ static int ath10k_fw_init(struct ath10k
+--- a/ath10k-6.18/snoc.c
++++ b/ath10k-6.18/snoc.c
+@@ -1630,10 +1630,10 @@ static int ath10k_fw_init(struct ath10k
ar_snoc->fw.dev = &pdev->dev;
* Mark functions only used in current source file as static.
* Comment out unused functions.
-/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.14/debug.c:425:6: error: no previous prototype for 'ath10k_debug_fw_ratepwr_table_process' [-Werror=missing-prototypes]
+/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.18/debug.c:425:6: error: no previous prototype for 'ath10k_debug_fw_ratepwr_table_process' [-Werror=missing-prototypes]
425 | void ath10k_debug_fw_ratepwr_table_process(struct ath10k *ar, struct sk_buff *skb)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.14/debug.c:437:6: error: no previous prototype for 'ath10k_debug_fw_powerctl_table_process' [-Werror=missing-prototypes]
+/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.18/debug.c:437:6: error: no previous prototype for 'ath10k_debug_fw_powerctl_table_process' [-Werror=missing-prototypes]
437 | void ath10k_debug_fw_powerctl_table_process(struct ath10k *ar, struct sk_buff *skb)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.14/debug.c:884:5: error: no previous prototype for 'ath10k_refresh_target_pdev_ext_ct_stats' [-Werror=missing-prototypes]
+/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.18/debug.c:884:5: error: no previous prototype for 'ath10k_refresh_target_pdev_ext_ct_stats' [-Werror=missing-prototypes]
884 | int ath10k_refresh_target_pdev_ext_ct_stats(struct ath10k *ar)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.14/htt_tx.c:1190:6: error: no previous prototype for 'ieee80211_is_robust_mgmt_frame_tx' [-Werror=missing-prototypes]
+/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.18/htt_tx.c:1190:6: error: no previous prototype for 'ieee80211_is_robust_mgmt_frame_tx' [-Werror=missing-prototypes]
1190 | bool ieee80211_is_robust_mgmt_frame_tx(struct ieee80211_hdr *hdr)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.14/wmi.c:3203:5: error: no previous prototype for 'ath10k_wmi_event_txbf_cv_mesg' [-Werror=missing-prototypes]
+/workspaces/openwrt/build_dir/target-x86_64_musl/linux-x86_64/ath10k-ct-regular/ath10k-ct-2025.03.14~63f5b605/ath10k-6.18/wmi.c:3203:5: error: no previous prototype for 'ath10k_wmi_event_txbf_cv_mesg' [-Werror=missing-prototypes]
3203 | int ath10k_wmi_event_txbf_cv_mesg(struct ath10k *ar, struct sk_buff *skb)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---
- ath10k-6.14/debug.c | 6 +++---
+ ath10k-6.18/debug.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
---- a/ath10k-6.14/debug.c
-+++ b/ath10k-6.14/debug.c
-@@ -422,6 +422,7 @@ static void ath10k_debug_fw_stats_reset(
+--- a/ath10k-6.18/debug.c
++++ b/ath10k-6.18/debug.c
+@@ -424,6 +424,7 @@ static void ath10k_debug_fw_stats_reset(
spin_unlock_bh(&ar->data_lock);
}
void ath10k_debug_fw_ratepwr_table_process(struct ath10k *ar, struct sk_buff *skb)
{
size_t sz = skb->len;
-@@ -445,6 +446,7 @@ void ath10k_debug_fw_powerctl_table_proc
+@@ -447,6 +448,7 @@ void ath10k_debug_fw_powerctl_table_proc
memcpy(ar->debug.powerctl_tbl.data, skb->data, sz);
complete(&ar->debug.powerctl_tbl_complete);
}
void ath10k_debug_fw_stats_process(struct ath10k *ar, struct sk_buff *skb)
{
-@@ -881,7 +883,7 @@ static int ath10k_refresh_target_rx_reor
+@@ -883,7 +885,7 @@ static int ath10k_refresh_target_rx_reor
return 0; /* fail silently if firmware does not support this option. */
}
{
if (test_bit(ATH10K_FW_FEATURE_CUST_STATS_CT,
ar->running_fw->fw_file.fw_features))
---- a/ath10k-6.14/htt_tx.c
-+++ b/ath10k-6.14/htt_tx.c
-@@ -1187,7 +1187,7 @@ static u8 ath10k_htt_tx_get_tid(struct s
+--- a/ath10k-6.18/htt_tx.c
++++ b/ath10k-6.18/htt_tx.c
+@@ -1189,7 +1189,7 @@ static u8 ath10k_htt_tx_get_tid(struct s
* since we do tx hw crypt, and it won't actually be encrypted even when this flag is
* set.
*/
{
if (ieee80211_is_disassoc(hdr->frame_control) ||
ieee80211_is_deauth(hdr->frame_control))
---- a/ath10k-6.14/wmi.c
-+++ b/ath10k-6.14/wmi.c
-@@ -3200,7 +3200,7 @@ printme:
+--- a/ath10k-6.18/wmi.c
++++ b/ath10k-6.18/wmi.c
+@@ -3206,7 +3206,7 @@ printme:
return 0;
}
---
- ath10k-6.14/core.h | 4 ++++
- ath10k-6.14/leds.c | 4 +---
- ath10k-6.14/mac.c | 2 +-
+ ath10k-6.18/core.h | 4 ++++
+ ath10k-6.18/leds.c | 4 +---
+ ath10k-6.18/mac.c | 2 +-
3 files changed, 6 insertions(+), 4 deletions(-)
---- a/ath10k-6.14/core.h
-+++ b/ath10k-6.14/core.h
-@@ -1707,6 +1707,10 @@ struct ath10k {
+--- a/ath10k-6.18/core.h
++++ b/ath10k-6.18/core.h
+@@ -1712,6 +1712,10 @@ struct ath10k {
u8 csi_data[4096];
u16 csi_data_len;
/* must be last */
u8 drv_priv[] __aligned(sizeof(void *));
};
---- a/ath10k-6.14/leds.c
-+++ b/ath10k-6.14/leds.c
-@@ -70,7 +70,7 @@ int ath10k_leds_register(struct ath10k *
+--- a/ath10k-6.18/leds.c
++++ b/ath10k-6.18/leds.c
+@@ -69,7 +69,7 @@ int ath10k_leds_register(struct ath10k *
ar->leds.cdev.name = ar->leds.label;
ar->leds.cdev.brightness_set_blocking = ath10k_leds_set_brightness_blocking;
ret = led_classdev_register(wiphy_dev(ar->hw->wiphy), &ar->leds.cdev);
if (ret)
---- a/ath10k-6.14/mac.c
-+++ b/ath10k-6.14/mac.c
-@@ -11654,7 +11654,7 @@ int ath10k_mac_register(struct ath10k *a
+--- a/ath10k-6.18/mac.c
++++ b/ath10k-6.18/mac.c
+@@ -11690,7 +11690,7 @@ int ath10k_mac_register(struct ath10k *a
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
#ifdef CPTCFG_MAC80211_LEDS
---
- ath10k-6.14/mac.c | 8 ++++----
+ ath10k-6.18/mac.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
---- a/ath10k-6.14/mac.c
-+++ b/ath10k-6.14/mac.c
-@@ -9081,12 +9081,12 @@ static void ath10k_flush(struct ieee8021
+--- a/ath10k-6.18/mac.c
++++ b/ath10k-6.18/mac.c
+@@ -9112,12 +9112,12 @@ static void ath10k_flush(struct ieee8021
if (vif) {
arvif = (void *)vif->drv_priv;
vid = arvif->vdev_id;
---- a/ath10k-6.14/wmi.h
-+++ b/ath10k-6.14/wmi.h
+--- a/ath10k-6.18/wmi.h
++++ b/ath10k-6.18/wmi.h
@@ -6310,7 +6310,7 @@ struct qca9880_set_ctl_table_cmd {
__le32 ctl_len; /* in bytes. This may be ignored in firmware,
* make sure ctl_info data is sizeof(qca9880_power_ctl) */
---- a/ath10k-6.14/htt.h
-+++ b/ath10k-6.14/htt.h
+--- a/ath10k-6.18/htt.h
++++ b/ath10k-6.18/htt.h
@@ -238,7 +238,11 @@ enum htt_rx_ring_flags {
};
---- a/ath10k-6.14/pci.c
-+++ b/ath10k-6.14/pci.c
-@@ -132,7 +132,11 @@ static const struct ce_attr pci_host_ce_
+--- a/ath10k-6.18/pci.c
++++ b/ath10k-6.18/pci.c
+@@ -133,7 +133,11 @@ static const struct ce_attr pci_host_ce_
.flags = CE_ATTR_FLAGS,
.src_nentries = 0,
.src_sz_max = 2048,
.recv_cb = ath10k_pci_htt_htc_rx_cb,
},
-@@ -141,7 +145,11 @@ static const struct ce_attr pci_host_ce_
+@@ -142,7 +146,11 @@ static const struct ce_attr pci_host_ce_
.flags = CE_ATTR_FLAGS,
.src_nentries = 0,
.src_sz_max = 2048,
.recv_cb = ath10k_pci_htc_rx_cb,
},
-@@ -168,7 +176,11 @@ static const struct ce_attr pci_host_ce_
+@@ -169,7 +177,11 @@ static const struct ce_attr pci_host_ce_
.flags = CE_ATTR_FLAGS,
.src_nentries = 0,
.src_sz_max = 512,
.recv_cb = ath10k_pci_htt_rx_cb,
},
-@@ -193,7 +205,11 @@ static const struct ce_attr pci_host_ce_
+@@ -194,7 +206,11 @@ static const struct ce_attr pci_host_ce_
.flags = CE_ATTR_FLAGS,
.src_nentries = 0,
.src_sz_max = 2048,
---
- ath10k-6.14/mac.c | 1 -
+ ath10k-6.18/mac.c | 1 -
1 file changed, 1 deletion(-)
---- a/ath10k-6.14/mac.c
-+++ b/ath10k-6.14/mac.c
-@@ -11339,7 +11339,6 @@ int ath10k_mac_register(struct ath10k *a
+--- a/ath10k-6.18/mac.c
++++ b/ath10k-6.18/mac.c
+@@ -11375,7 +11375,6 @@ int ath10k_mac_register(struct ath10k *a
ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);